#!/bin/bash

# A script that includes another script
NOMREPERTOIRE="tasks_management"
NOMFICHIER="common.sh"
CRON_ROOT_FILE="/var/spool/cron/root"
CRON_USER_FILE="/var/spool/cron/$USER"
TMP_FILE_IN="cron_root_tmp_in.txt"
TMP_FILE_OUT="cron_root_tmp_out.txt"


	
source $PWD/$NOMREPERTOIRE/$NOMFICHIER   # include is in $PATH

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
FLAG=0;
TASK=0;
################# DEFINITION DES FONCTIONS ####################################


cron_reboot()
{
	set_task;
	if [ $1 -eq 0 ]; then
	su -c "echo @reboot $TASK >> $CRON_ROOT_FILE";
else
	su -c "echo @reboot $TASK >> $CRON_USER_FILE";
fi
}
cron_yearly()
{
	set_task;
	if [ $1 -eq 0 ]; then
	su -c "echo @yearly $TASK >> $CRON_ROOT_FILE";
else
	su -c "echo @yearly $TASK >> $CRON_USER_FILE";
fi
	
}
cron_monthly()
{
	set_task;
	if [ $1 -eq 0 ]; then
	su -c "echo @monthly $TASK >> $CRON_ROOT_FILE";
else
	su -c "echo @monthly $TASK >> $CRON_USER_FILE";
fi
}
cron_weekly()
{
	set_task;
	if [ $1 -eq 0 ]; then
	su -c "echo @weekly $TASK >> $CRON_ROOT_FILE";
else
	su -c "echo @weekly $TASK >> $CRON_USER_FILE";
fi
}
cron_daily()
{
	set_task;
	if [ $1 -eq 0 ]; then
	su -c "echo @daily $TASK >> $CRON_ROOT_FILE";
else
	su -c "echo @daily $TASK >> $CRON_USER_FILE";
fi
}
cron_midnight()
{
	set_task;
	if [ $1 -eq 0 ]; then
	su -c "echo @midnight $TASK >> $CRON_ROOT_FILE";
else
	su -c "echo @midnight $TASK >> $CRON_USER_FILE";
fi
}
cron_hourly()
{
	set_task;
	if [ $1 -eq 0 ]; then
	su -c "echo @hourly $TASK >> $CRON_ROOT_FILE";
else
	su -c "echo @hourly $TASK >> $CRON_USER_FILE";
fi
}
cron_choice()
{
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

	while true
	do
		echo "Saisir les minutes (0 - 59)";
read MINUTES;
verif_minutes "$MINUTES" && break;
echo "Veuillez résaisir les $MINUTES ";
done

while true
	do
		echo "Saisir l' heure (0 - 23)";
read HEURE;
verif_hours "$HEURE" && break;
echo "Veuillez résaisir l'HEURE ";
done

while true
	do
		echo "Saisir le jour du mois (1 - 31)";
read JOURMOIS;
verif_day_month "$JOURMOIS" && break;
echo "Veuillez résaisir le jour du mois ";
done

while true
	do
		echo "Saisir le mois (1 - 12)";
read MOIS;
verif_month "$MOIS" && break;
echo "Veuillez résaisir le mois ";
done


while true
	do
		echo "Saisir le jour de la semaine (0 - 6)";
read JOURSEMAINE;
verif_day_week "$JOURSEMAINE" && break;
echo "Veuillez résaisir le jour de la semaine ";
done

set_task;

if [ $1 -eq 0 ]; then
	su -c "echo $MINUTES $HEURE $JOURMOIS $MOIS $JOURSEMAINE $TASK >> $CRON_ROOT_FILE";
else
	su -c "echo $MINUTES $HEURE $JOURMOIS $MOIS $JOURSEMAINE $TASK >> $CRON_USER_FILE";
fi
}

cron_list()
{
	rm -f $TMP_FILE_OUT;
	rm -f $TMP_FILE_IN;
	echo $CRON_USER_FILE;
	echo $CRON_ROOT_FILE
	
	if [ $1 -eq 0 ]; then
		su -c "cat $CRON_ROOT_FILE > $TMP_FILE_IN";
	else
		su -c "cat $CRON_USER_FILE > $TMP_FILE_IN";
	fi
	
	OLD_IFS=$IFS     # sauvegarde du séparateur de champ  
	IFS=$'\n'
	j=0;
	for i in `cat $TMP_FILE_IN`
		do
			j=$(($j + 1));
			echo -e "$j $i"'\n' >> $TMP_FILE_OUT;
		done
		
	IFS=$OLD_IFS     # rétablissement du séparateur de champ par défaut

	cat $TMP_FILE_OUT;
	
}

cron_del()
{
	echo $1;
	cron_list $1;
	echo "enter your choice";
	read CHOICE;

	if [ $1 -eq 0 ]; then
		su -c "sed -i[.bak] '"$CHOICE"d' $CRON_ROOT_FILE";
	else
		su -c "sed -i[.bak] '"$CHOICE"d' $CRON_USER_FILE";
	fi
	
}

################# Menu cron root #############

#@reboot # se lance au reboot avec les droits utilisateurs, bien commode
#@yearly
#@annually
#@monthly
#@weekly
#@daily
#@midnight
#@hourly


	while :
do
	clear
	echo "[1] Répéter une tâche à chaque redémarage"
	echo "[2] Répéter une tâche tous les annéees"
	echo "[3] Répéter une tâche tous les mois"
	echo "[4] Répéter une tâche toutes les semaines"
	echo "[5] Répéter une tâche tous les jours"
	echo "[6] Répéter une tâche tous les minuits"
	echo "[7] Répéter une tâche toutes les heures"
	echo "[8] Répéter une tâche selon votre choix"
	echo "[9] Lister les tâches CRON de $USER"
	echo "[10] Supprimer une tâche CRON"
	echo "[11] retour au menu"
	echo "----------------------------------------------"
	echo -n "Entrer votre choix [1-11]:"
	read CHOIX
case $CHOIX in
		1) echo "task at reboot:"; cron_reboot $1;;
		2) echo "task every year:"; cron_yearly $1;;
		3) echo "task every month:"; cron_monthly $1;;
		4) echo "task every week:"; cron_weekly $1;;
		5) echo "task every day:"; cron_daily $1;;
		6) echo "task every midnight:"; cron_midnight $1;;
		7) echo "task every hour"; cron_hourly $1;;
		8) echo "task with choices:"; cron_choice $1;;
		9) echo "Liste de tâches Cron"; cron_list $1;read;;
		10) echo "Suppression d'une tâche Cron au choix:"; cron_del $1;;
		11) echo "Appuyer sur une touche pour continuer";exit 0 ;;
		*) echo "Choix entre 1,2,3,4,5,6,7,8,9,10 ou 11";
		echo "Appuyer sur une touche pour continuer" ;read;;
		esac
done

